package com.ccp.dev.form.dao;

import com.ccp.dev.core.basic.base.IBaseMapper;
import com.ccp.dev.form.model.FormRights;
import com.ccp.dev.workflow.bpminterface.IActDefMapper;
import org.apache.ibatis.annotations.Param;
import java.util.List;
import java.util.Map;

/**
 * Form_Rights Dao对象
 *
 * @author caishaofan
 */
public interface FormRightsDao extends IBaseMapper<FormRights, String>, IActDefMapper {

    /**
     * 根据表单id获取表单权限。
     *
     * @param formKey 表单key
     * @return List<FormRights>
     */
    List<FormRights> getByFormKeyNodeEmpty(@Param("formKey") String formKey);

    /**
     * 根据流程定义id，任务节点id和表单id获取权限数据。
     * @param formKey 表单别名
     * @param actDefId
     * @param actDefIdIsNull
     * @param nodeId
     * @param nodeIdIsNull
     * @param parentActDefId
     * @param parentActDefIdIsNull
     * @param platform
     * @return List<BpmFormRights>
     */
    List<FormRights> getBpmFormRights(@Param("formKey")String formKey,@Param("actDefId")String actDefId,@Param("actDefIdIsNull")boolean actDefIdIsNull,@Param("nodeId")String nodeId,@Param("nodeIdIsNull")boolean nodeIdIsNull,@Param("parentActDefId")String parentActDefId,@Param("parentActDefIdIsNull")boolean parentActDefIdIsNull,@Param("platform")Integer platform);

    /**
     * 根据流程定义id，节点id 删除表单权限。
     * @param actDefId		流程定义ID
     * @param nodeId		流程节点ID
     * @param platform	平台类型
     */
    void delByActDefIdAndNodeId(@Param("actDefId")String actDefId,@Param("nodeId")String nodeId,@Param("platform")Integer platform);

    /**
     * 根据流程定义ID删除流程表单权限设置
     * @param actDefId 流程定义ID
     * @param platform	平台类型
     */
    void delByActDefIdExcNode(@Param("actDefId")String actDefId,@Param("platform")Integer platform);

    /**
     * 根据表单键删除权限。
     * @param formKey 表单key
     * @param platform	平台类型
     */
    void delByFormKeyExcActDefId(@Param("formKey")String formKey,@Param("platform")Integer platform);

    /**
     * 根据流程定义id，节点id删除表单权限。
     * @param actDefId		 流程定义ID
     * @param nodeId		 流程节点ID
     * @param parentActDefId 父流程定义ID
     * @param platform		 平台类型
     */
    void delByActDefIdAndNodeIdAndParentActDefId(@Param("actDefId")String actDefId,@Param("nodeId")String nodeId,@Param("parentActDefId")String parentActDefId,@Param("platform")Integer platform);

    /**
     * 根据流程定义ID删除流程表单权限设置
     * @param actDefId 流程定义ID
     * @param parentActDefId 父流程定义ID
     * @param platform 平台类型
     */
    void delByActDefIdAndParentActDefIdExcNode(@Param("actDefId")String actDefId,@Param("parentActDefId")String parentActDefId,@Param("platform")Integer platform);


    /**
     * 根据表单别名等删除表单权限 (包含流程节点设置的表单权限)
     *
     * @param params 参数
     */
    void delByFormKey(Map<String,Object> params);

    /**
     * 根据表单别名等删除表单权限
     *
     * @param params 参数
     */
    void delByFormKeyExcActDefId(Map<String,Object> params);

    /**
     * 根据流程定义id，节点id获取表单的权限。
     * @param actDefId
     * @param nodeId
     * @return
     */
     List<FormRights> getByActDefIdAndNodeId(@Param("formKey")String formKey,@Param("actDefId")String actDefId,@Param("nodeId")String nodeId, @Param("parentActDefId") String parentActDefId, @Param("platform")Long platform);

    /**
     * 获取表单权限
     * @param formKey 表单key
     * @param actDefId 流程id
     * @param platform 平台类型
     * @return List<FormRights>
     */
     List<FormRights> getByActDefId(@Param("formKey")String formKey,@Param("actDefId")String actDefId,@Param("platform")String platform);

    /**
     * 获取表单权限
     * @param formKey 表单key
     * @param actDefId 流程id
     * @param platform 平台类型
     * @return List<FormRights>
     */
     List<FormRights> getByActDefIdExcNodeId(@Param("formKey")String formKey,@Param("actDefId")String actDefId, @Param("parentActDefId") String parentActDefId, @Param("platform")Long platform);

    /**
     * 根据表单key 获取表单权限。
     * @param formKey 表单key
     * @param platform 平台类型
     * @return List<FormRights>
     */
     List<FormRights> getByFormKey(@Param("formKey")String formKey,@Param("platform")String platform);

    /**
     * 通过表单key和平台获取权限
     * @param formKey 表单key
     * @param platform 平台类型
     * @return 权限列表
     */
     List<FormRights> getByFormKeyExcActDefId(@Param("formKey")String formKey,@Param("platform")Long platform);

    /**
     * 根据actDefId 获取表单权限。
     * @param actDefId
     * @param platform
     * @return
     */
    List<FormRights> queryFormRightsByActDefId(@Param("actDefId") String actDefId,@Param("platform") String platform);
    /**
     * 根据actDefIdh和parentActDefId获取表单权限。
     * @param actDefId
     * @param parentActDefId
     * @param platform
     * @return
     */
    List<FormRights> queryFormRightsByActDefIdWithParentActDefId(@Param("actDefId") String actDefId,@Param("parentActDefId") String parentActDefId,@Param("platform") String platform);
}
